/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
// 这是 ai 的回答，但是我觉得我的答案好像比较好
// 不对，我发现这 ai 的回答，好像更加的好理解
var twoSum = function (nums, target) {
  const map = new Map(); // 创建哈希表存储已遍历的数值和索引

  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i];

    // 检查补数是否已存在于哈希表中
    if (map.has(complement)) {
      return [map.get(complement), i]; // 返回补数的索引和当前索引
    }

    // 将当前数值和索引存入哈希表
    map.set(nums[i], i);
  }

  return []; // 题目保证有解，理论上不会执行到这一步
};

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (nums, target) {
  let j,
    len = nums.length;
  let hash = {};
  for (let i = 0; i < len; i++) {
    j = target - nums[i];
    if (hash[j] !== undefined) {
      return [i, hash[j]];
    } else {
      hash[nums[i]] = i;
    }
  }
};
